package com.hjm.project.agentInfo.agentInfo.service;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

import com.hjm.framework.web.domain.AjaxResult;
import com.hjm.project.accounts.accounts.domain.Accounts;
import com.hjm.project.agentInfo.agentInfo.domain.AgentInfo;
import com.hjm.project.agentInfo.agentInfo.domain.AgentInfoExport;
import com.hjm.project.agentInfo.agentInfo.domain.AgentInfoNextVo;
import com.hjm.project.clientImg.clientImg.domain.ClientImg;
import com.hjm.project.system.user.domain.User;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;

/**
 * 服务商申请Service接口
 *
 * @author LOVE
 * @date 2020-11-18
 */
public interface IAgentInfoService
{

    /**
     * 导出查询服务商列表
     *
     * @param agentInfo 服务商列表
     * @return 服务商集合
     */
    public List<AgentInfoExport> selectAgentInfoExportList(AgentInfo agentInfo);


    /**
     * 查询服务商申请
     *
     * @param agentNum 服务商申请ID
     * @return 服务商申请
     */
    public AgentInfo selectAgentInfoById(String agentNum);

    /**
     * 查询服务商申请列表
     *
     * @param agentInfo 服务商申请
     * @return 服务商申请集合
     */
    public List<AgentInfo> selectAgentInfoList(AgentInfo agentInfo);

    public List<AgentInfo> selectAgentInfoListAll(AgentInfo agentInfo);


    public List<AgentInfo> selectNextAgentInfoList(AgentInfo agentInfo);


    /**
     * 获取所有服务商带服务商机具总量
     * @Param [agentInfo]
     * @Return java.util.List<com.hjm.project.agentInfo.agentInfo.domain.AgentInfo>
     */
    public List<AgentInfo> selectAgentInfoTeamList(AgentInfo agentInfo);


    public List<AgentInfo> getAgentList(String agent_num) throws Exception;

    /**
     * 新增服务商申请
     *
     * @param agentInfo 服务商申请
     * @return 结果
     */
    public int insertAgentInfo(AgentInfo agentInfo);


    /**
     * 添加/修改服务商信息
     * @param agentinfo
     * @return
     * @throws Exception
     */
    public int saveOrUpdate(AgentInfo agent, Accounts accounts, Map agentinfo) throws Exception;

    /**
     * 修改服务商申请
     *
     * @param agentInfo 服务商申请
     * @return 结果
     */
    public int updateAgentInfo(AgentInfo agentInfo) throws Exception;

    /**
     * 降级服务商指定档位
     *
     * @param agentInfo 服务商申请
     * @return 结果
     */
    public int saveDemotion(AgentInfo agentInfo) throws Exception;

    /**
     * 降下档位
     * @Param [agentInfo]
     * @Return int
     */
    public int rainGrade(AgentInfo agentInfo) throws ParseException, Exception;

    /**
     * 批量删除服务商申请
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteAgentInfoByIds(String ids);

    /**
     * 删除服务商申请信息
     *
     * @param agentNum 服务商申请ID
     * @return 结果
     */
    public int deleteAgentInfoById(Long agentNum);


    /**
     * 服务商审核
     * @param agent_num
     * @return
     * @throws Exception
     */
    public int agentUpdate(String agent_num, String agent_status, String username, String commissary) throws Exception;



    public AgentInfo getAgentOne(String agent_num) throws Exception;


    /**
     * 服务商打回
     * @param agent_num
     * @param note
     * @return
     * @throws Exception
     */
    public int agentRepulse(String agent_num, String note, String username, String agent_status) throws Exception;


    /**
     * 通过agentNum查询服务商信息
     *
     * @param agentNum
     * @return
     */
    public AgentInfo selectAgentInfoByAgentNum(String agentNum);

    /**
     * 启用禁用服务商
     *
     * @param agentInfo
     * @param operatorName
     * @return
     */
    public AjaxResult saveStatus(AgentInfo agentInfo,String operatorName);

    /**
     * 服务商注销
     *
     * @param agentInfo
     * @return
     */
    public AjaxResult saveCancel (AgentInfo agentInfo);

    /**
     * 通过服务商编号查询用户信息
     *
     * @param agentNum
     * @return
     */
    public User getUserByObjNo(String agentNum);

    /**
     * 保存服务商申请盟主
     *
     * @param bannerFile
     * @param agentNum
     * @param specialGradeId
     * @return
     */
    public AjaxResult setLeader(List<MultipartFile> bannerFile, String agentNum, String specialGradeId,String createMan)throws Exception;



    public int saveImg(String agent_num, HttpServletRequest request, String createName) throws Exception;


        /**
         * 盟主审核
         *
         * @param agentInfo
         * @return
         */
    public AjaxResult trialAgent(AgentInfo agentInfo,String type);


    /**
     * 获取本级级以下
     * @Param [agentInfo, type]
     * @Return com.hjm.framework.web.domain.AjaxResult
     */
    public List<AgentInfo> selectBetweenAgent(AgentInfo agentInfo);


    /**
     * 获取本级下所有的服务商 不包含本级
     * @Param [agentInfo, type]
     * @Return com.hjm.framework.web.domain.AjaxResult
     */
    public List<AgentInfo> selectBetweenAgentNoBelongAgent(AgentInfo agentInfo);


    /**
     * 获取服务商的图片
     *
     * @param clientImg
     * @return
     */
    public List<ClientImg> getImg(ClientImg clientImg);


    /**
     * 更新服务商
     *
     * @param agentInfo
     * @return
     */
    public AgentInfo selectBeautiful(AgentInfo agentInfo);
    public int updateAgent(AgentInfo agentInfo);
    public int updateAgent1(AgentInfo agentInfo);
    public int updateAgentAll(AgentInfo agentInfo);

    /**
     * 服务商档位降级
     * @Param [agentInfo]
     * @Return int
     */
    public int updateAgentRainGrade(AgentInfo agentInfo);
    public int updateAgentGrade(AgentInfo agentInfo);

    /**
     *服务商送审
     * @Param [agentInfo]
     * @Return int
     */
    public int audit(AgentInfo agentInfo);


    /**
     * 根据代理商编号更新指标数
     *
     * @param agentInfo
     * @return
     */
    public int updateAgentNorm(AgentInfo agentInfo);




    public Integer selectBelongAgent(AgentInfo agentInfo);


    List<Map<String,Object>> lookSendAgentInfoList(AgentInfo agentInfo);

    void sendAgentInfo(Map param);

    /**
     * 查询登录代理团队信息
     *
     * @param agentNum 服务商申请ID
     * @return 服务商申请
     */
    List<AgentInfo> selectAgentListBy(AgentInfo agentNum);

    /**
     * 获取顶级代理商
     * @param agentInfo
     * @return
     */
    List<AgentInfo> selectTopAgentInfo(AgentInfo agentInfo);

    /**
     * 获取本级和所有下级代理信息
     * @param agentNum
     * @return
     */
    List<AgentInfoNextVo> selectAgentInfoNext(String agentNum);


    AgentInfo selectAgentInfoByAgent1(AgentInfo agentInfo);
    List<AgentInfo> selectAgentInfoByAgent2(AgentInfo agentInfo);

    AgentInfo selectAgentInfoByAgentNum1(String agentNum);
    AgentInfo selectAgentInfoByAgentNum2(String agentNum);
    List<AgentInfo> selectAgentInfoByAgentNum3(String agentNum);
    AjaxResult agentMigrateUpdate(String agentNum, String agentName, String newBelongAgent, String newBelongAgentName);

    public AjaxResult saveUpdateBank(Map<String,String> params);

    public AjaxResult saveSetPolicy(Map<String,String> params,String[] actId);

}
